<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  

  
  <title>计算机网路笔记 | 黑不溜球de博客么么哒</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="计算机网络1，网络层 网络层的功能：   异构网络互联   通过中间设备（网络层：路由器），把复杂的网络结构连接起来   路由与转发    1, 路由选择：按照复杂的分布式算法，根据从各相邻路由器得到整个网络拓扑的变化情况，转发相关的队列队列管理，任务调度等等。 2,路由转发：根据路由转发表，将用户的IP数据报，从合适的端口转发出去    拥塞控制   判断网络负载与吞吐量的关系，从而确定网络是否">
<meta property="og:type" content="article">
<meta property="og:title" content="计算机网路笔记">
<meta property="og:url" content="http://example.com/2020/11/03/computer/index.html">
<meta property="og:site_name" content="黑不溜球de博客么么哒">
<meta property="og:description" content="计算机网络1，网络层 网络层的功能：   异构网络互联   通过中间设备（网络层：路由器），把复杂的网络结构连接起来   路由与转发    1, 路由选择：按照复杂的分布式算法，根据从各相邻路由器得到整个网络拓扑的变化情况，转发相关的队列队列管理，任务调度等等。 2,路由转发：根据路由转发表，将用户的IP数据报，从合适的端口转发出去    拥塞控制   判断网络负载与吞吐量的关系，从而确定网络是否">
<meta property="og:locale" content="en_US">
<meta property="article:published_time" content="2020-11-03T06:52:16.047Z">
<meta property="article:modified_time" content="2020-11-18T00:13:27.641Z">
<meta property="article:author" content="Jone-xin">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/my_blog/atom.xml" title="黑不溜球de博客么么哒" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png">
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  
<link rel="stylesheet" href="/my_blog/css/style.css">

<meta name="generator" content="Hexo 5.2.0"></head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/my_blog/" id="logo">黑不溜球de博客么么哒</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/my_blog/">主页</a>
        
          <a class="main-nav-link" href="/my_blog/archives">归档</a>
        
          <a class="main-nav-link" target="_blank" rel="noopener" href="https://gitee.com/xiangxinag-darling">@我的gitee</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/my_blog/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="http://example.com"></form>
      </div>
    </div>
  </div>
</header>
      <div class="outer">
        <section id="main"><article id="post-computer" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/my_blog/2020/11/03/computer/" class="article-date">
  <time datetime="2020-11-03T06:52:16.047Z" itemprop="datePublished">2020-11-03</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 class="article-title" itemprop="name">
      计算机网路笔记
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h3 id="计算机网络"><a href="#计算机网络" class="headerlink" title="计算机网络"></a>计算机网络</h3><h4 id="1，网络层"><a href="#1，网络层" class="headerlink" title="1，网络层"></a>1，网络层</h4><ul>
<li><p>网络层的功能：</p>
<blockquote>
<ul>
<li>异构网络互联</li>
</ul>
<blockquote>
<p>通过中间设备（网络层：路由器），把复杂的网络结构连接起来</p>
</blockquote>
<ul>
<li>路由与转发</li>
</ul>
<blockquote>
<ul>
<li>1, 路由选择：按照复杂的分布式算法，根据从各相邻路由器得到整个网络拓扑的变化情况，转发相关的队列队列管理，任务调度等等。</li>
<li>2,路由转发：根据路由转发表，将用户的IP数据报，从合适的端口转发出去</li>
</ul>
</blockquote>
<ul>
<li>拥塞控制</li>
</ul>
<blockquote>
<p>判断网络负载与吞吐量的关系，从而确定网络是否处于拥塞状态，进而通过，开环控制或者闭环控制来防止拥塞。</p>
<ul>
<li>开环控制：一种静态的（事先考虑可能的拥赛因素），一旦网络系统启动，中途就不能修改。</li>
<li>闭环控制：一种动态的（采用网络监控系统，实时的监控拥塞位置），拥塞控制方法。</li>
</ul>
</blockquote>
</blockquote>
</li>
<li><p>路由算法</p>
<blockquote>
<ul>
<li>1,静态路由算法（非自适应路由算法）：人工配置路由信息。</li>
<li>2,动态路由算法（自适应路由算法）：路由器上的路由表项是通过相互连接的路由器之间彼此交换信息，按照一定的算法优化出来。</li>
<li>动态路由算法分类：</li>
</ul>
<blockquote>
<ul>
<li>距离-向量路由算法</li>
</ul>
<blockquote>
<p>迭代计算一条路由中的站段数或延迟时间，从而得到到达一个目标的最短（最小代价）通路，代表的协议：RIP</p>
</blockquote>
<ul>
<li>链路状态路由算法</li>
</ul>
<blockquote>
<p>一个节点检查所有节点的链路状态，并且把的到的信息发送给网络上的其他所有节点，一旦网络发生变化，节点就对跟新的网络图，利用Dijsktra最短路径算法重新计算路由。</p>
</br>
**特点**：</br>
1，利用洪泛发向本治系统所有路由器发送信息，  
2，发送的信息是与相邻所有路由器的链路状态（度量），对于OSPF，度量是：费用，距离，时延，带宽。  
3，只有链路状态发生变化时，才会向所有路由器发送此消息。  
相比距离-向量算法的优点：  
1，每个路由器都使用原始状态的数据，独立的计算路径，不依赖中间节点的计算  
2，链路状态不加改变的传播，更有利于查找故障。
3，有更好的规模可延展性。

<ul>
<li>层次路由<br>将整个互联网划分成不同的自制系统，每个自制系统内部可以有各自的路由协议。  </li>
</ul>
<ul>
<li>IGP（内部网关协议）<br>自制系统内部使用的关协议，RIP，OSPF等  </li>
<li>EGP（外部网关协议）<br>不同自制系统之间路由交换协议，负责在路由间选择最优路径，BGP等</li>
</ul>
</blockquote>
</blockquote>
</blockquote>
</li>
<li><p>IPV4</p>
<blockquote>
<p><strong>1,IP的组成：首部（20B）+数据报</strong><br>首部组成:  </p>
<ul>
<li>版本：4位</li>
<li>首部长度：4位，以4B为单位，最大15*4=60B，一般首部长度常用的是20B</li>
<li>总长度：16位，以1B位单位，最大长度位2^16-1=65535B,由于以太网帧的最大长度位1500B，所以ip报文分组的最大长度不能超过1500B，</li>
<li>标志：3位，最后一位表示MF，MF=1，表示后面还有分片，MF=0表示后面无分片，中间一位表示DF，只有DF=0，才允许分片，第一位没什么意义。</li>
<li>首部验和：16位，只校验首部，不校验数据部分</li>
<li>生存时间（TTL）：8位，转发分组前，TTl-1，通过一个路由器，TTL-1，直到剪为0，寿命结束。</li>
<li>协议：8位，比如：6表示TCP，17表示UDP</li>
<li>片偏移：13位，以8B位单位。  </li>
</ul>
</blockquote>
<blockquote>
<p><strong>2,IPV4地址分类</strong></p>
<ul>
<li>分为A，B，C，D，E五类<br>IPV4地址由 网络号+主机号组成。</li>
</ul>
</blockquote>
</li>
</ul>
<blockquote>
<p>–代表：网络号，++代表主机号</p>
<table>
<thead>
<tr>
<th>分类</th>
<th>格式</th>
<th>主机的最大个数</th>
<th>最大的网络数</th>
<th></th>
</tr>
</thead>
<tbody><tr>
<td>A类</td>
<td>0——- +++++++ ++++++++ ++++++++</td>
<td>2^24-2个</td>
<td>2^7-2个</td>
<td></td>
</tr>
<tr>
<td>B类</td>
<td>10—— ——- ++++++++ ++++++++</td>
<td>2^16-2个</td>
<td>2^14-2个</td>
<td></td>
</tr>
<tr>
<td>C类</td>
<td>110—– ——- ——– ++++++++</td>
<td>2^8-2个</td>
<td>2^21-2个</td>
<td></td>
</tr>
<tr>
<td>D类</td>
<td>1110     多播地址</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>E类</td>
<td>1111 保留使用</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
</blockquote>
<ul>
<li><p>网络地址转换：（NAT）</p>
<blockquote>
<p>为了解决网络的IP地址不够用的问题<br><strong>实现原理</strong>：将专用的网路地址转化成公用地址，使得整个专用网只需要一个共有IP就能够与internet连接。从而大大增加了IP的复用。</p>
<ul>
<li>NAT转换表示例：</li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th>WLAN</th>
<th>LAN</th>
<th></th>
</tr>
</thead>
<tbody><tr>
<td>138.76.29.7:5001</td>
<td>192.168.0.2:5060</td>
<td></td>
<td></td>
</tr>
<tr>
<td>138.76.29.7:451</td>
<td>192.168.8.241:2314</td>
<td></td>
<td></td>
</tr>
</tbody></table>
</blockquote>
</li>
<li><p>子网掩码和CIDR（无分类域间路由选择）</p>
<blockquote>
<ul>
<li>子网掩码<br>1,子网划分：将主机号再进行划分成《子网号》+《主机号》<br>2,子网的网络地址：IP地址 AND 子网掩码<br>3,子网掩码：A类：255.0.0.0，B类：255.255.0.0，C类：255.255.255.0</li>
<li>CIDR<br>IP = {&lt;网络前缀&gt;，《主机号》}<br>网络前缀的计算：比如对于128.14.3.25/20这个地址。子网掩码就是20个1加12个0组成，然后与这个地址与运算，截取前20位，就是网络前缀。最后网络前缀和主机号拼接，就是IP的CIDR。 </li>
<li>三个协议：ARP,DHCP,ICMP<br>1,ARP：地址解析解析，解决IP–&gt;MAc地址的映射<br>2,DHCP:动态主机配置协议，给主机动态的分配IP地址<br>3，ICMP：网际控制报文协议，让主机或者路由器发送差错报文和异常情况。</li>
</ul>
</blockquote>
</li>
<li><p>IPv6地址：</p>
<blockquote>
<p>1,解决IP地址耗尽的问题：1，采用CIDR，2，采用NAT转换，3，采用IPv6地址方式。<br>2,IPv6是16B，128位，是IPv4的平方<br>3,IPv6:4位用1位16进制数表示，每四个16位用：分隔开，例如：4BF5:AA12:1245:BFA4:DE24:456F:FDE4:345D</p>
</blockquote>
</li>
<li><p>路由协议：</p>
</li>
</ul>
<hr>
<h3 id="2，传输层"><a href="#2，传输层" class="headerlink" title="2，传输层"></a>2，传输层</h3><ul>
<li><p>网络层提供了主机之间的逻辑通信，而传输层提供了不同进程之间的逻辑通信。</p>
</li>
<li><p>复用：不同应用进程都可以使用同一种传输协议发送数据。</p>
</li>
<li><p>分用：接收方的传输层剥去报文首部后，能把数据正确的交付到目的应用进程。</p>
</li>
<li><p>端口：标识不同应用进程，16位，总共能标识65536种不同的端口号。</p>
<blockquote>
<p>1,服务器使用端口号：0-1023<br>2,客户端使用端口号：49152-65536</p>
</blockquote>
</li>
<li><p>套接字（Socket）：套接字 =（主机IP地址 ，端口号）</p>
</li>
<li><p>UDP：</p>
<blockquote>
<p>1,功能：在IP数据报服务之上提供可复用，分用，差错检验的功能<br>2,UDP提供的是最大努力的不可靠的交付<br>3,UDP数据报组成：头部+数据</p>
<ul>
<li>头部组成：<br>1,源端口 2B，<br>2,目的端口：2B<br>3,UDP 数据报的长度。最小值是8，校验和2B</li>
<li>UDP数据校验：在UDP数据报前增加12B的伪首部。</li>
</ul>
</blockquote>
</li>
<li><p>TCP 协议</p>
<blockquote>
<ul>
<li>特点：<br>1,点对点<br>2,可靠交付<br>3,TCP提供全双工通信<br>4,TCP面向的是字流</li>
<li>TCP报文组成：首部（20B） + 数据报<br>1, 源端口：2B<br>2, 目的端口：2B<br>3, 序号字段：4B，数据流中每一个字号都会编上字段<br>4, 确认号字段：4B，希望收到下一个字节的第一个序号<br>5, 数据偏移：4 位，Tcp报文段距离首部的距离。<br>6, 保留字段 6位，保留今后使用<br>7, WRL；1位 紧急位，URL= 1，表示该字段数据紧急，应尽快送达<br>8, <strong>==ACK:确认位，ACK = 1时，字段才有效==**。<br>9, PSH：推送位，尽快交付应用进程，不必等到缓存填满再交付<br>10, RST: RST = 1,表示TCP连接出现差错，必须释放重新连接<br>**==11,SYN：同步位，表示是一个请求或者相应报文，ACK =0,SYN =1,表示是一个请求报文，ACK = 1，SYN =1，表示是一个响应报文==</strong><br>12, ==<strong>FIN</strong>：终止位，FIN=1，表示发送方已经发送完毕，并要求释放连接==。<br>13, 窗口字段 2B<br>14, 校验和：2B<br>15, 紧急指针字段：16位<br>16, 选项字段<br>17, 填充字段  </li>
</ul>
</blockquote>
</li>
<li><p>TCP的连接与断开<br>1.TCP的三次握手（建立连接的个阶段  ）</p>
<ul>
<li>1,客户端向服务器发送一个请求报文，不包含应用层的数据，首部SYN=1，并消耗品一个起的随机序号。</li>
<li>2，服务器收到报文后，向客户机发回确认，并为此次连接分配TCP缓存和变量，确认报文中，SYN，ACK都为1，确认号字段为x+1，并返回一个随机的起始序号y</li>
<li>3，收到服务器发送的确认报文后，并继续向服务器发送确认，给出该连接的缓存和变量，该报文ACK=1，序号为x+1,确认号为 y+1.（可以携带数据），如不携带数据，则不会消耗确认号。</li>
</ul>
</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">sequenceDiagram</span><br><span class="line"></span><br><span class="line">客户-&gt;&gt;服务器:1⃣️SYN&#x3D;1，seq&#x3D;x</span><br><span class="line">服务器-&gt;&gt;客户: 2⃣️SYN&#x3D;1，ACK&#x3D;1，seq&#x3D;y，ack&#x3D;x+1</span><br><span class="line">客户-&gt;&gt;服务器: 3⃣️:ACK&#x3D;1，seq&#x3D;x+1 ack&#x3D;y+1️</span><br></pre></td></tr></table></figure>

<ol start="2">
<li>TCP的四次挥手阶段（释放连接的过程）<ul>
<li>1，向服务器发送一个释放报文，并停止发送数据，此报文FIN=1，seq=u，u为服务器前面传过来的数据的最后一个字节序号+1，此时客户端不能给服务器发送数据，但服务器仍然能够给可客户端发送数据。</li>
<li>2，服务器收到释放报文之后，发出确认，确认号：u+1，并返回序号v，它等于客户端传给服务器最后一个数据的序号+1，此时，从客户端到服务端的连接被释放掉了。TCP处于半关闭壮态，服务器到客户端的连接并未断开</li>
<li>3，若服务器已经没有要向客户端发送的数据，此时发送连接释放报文段，FIN=1，ACK=1，seq=w，ack=u+1</li>
<li>4，客户机收到释放报文后，发出确认报文，ACK=1，确认号：sck=w+1，seq=u+1，ack=w+1，此时，TCP连接还未释放，必须等待计时器配置的时间2MSL后才会释放连接。</li>
</ul>
</li>
</ol>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">sequenceDiagram</span><br><span class="line"></span><br><span class="line">客户-&gt;&gt;服务器:1⃣️FIN&#x3D;1，req&#x3D;u</span><br><span class="line">服务器-&gt;&gt;客户: 1⃣️ACK&#x3D;1，seq&#x3D;v，ack&#x3D;u+1</span><br><span class="line">服务器-&gt;&gt;客户: 3⃣️:FIN&#x3D;1，ACK&#x3D;1，seq&#x3D;w，sck&#x3D;u+1️</span><br><span class="line">客户-&gt;&gt;服务器: 3⃣️:ACK&#x3D;1，seq&#x3D;u+1，，ack&#x3D;w+1</span><br></pre></td></tr></table></figure>

<ul>
<li><p>关于TCP建立和释放阶段的两个问题点</p>
<blockquote>
<p>1.为什么采用三次握手而不是2次握手？<br>答：保证数据传输过程中的准确性，以及保证服务器资源不浪费。（2次握手）例如：A给B发了一个连接报文，但这个报文在传输过程中滞留，一定时间后，A认为超时，开始重传，B收到后，连接结束后，滞留的报文到达了B，B又认为是A传过来的建立连接的报文，就一直等待A连接。浪费了B的资源，而三次握手，像这种情况，由于B还要发给A’一个确认报文，当这个失效的报文到A，A直接抛弃这个失效的报文，保证了资源的不浪费以及数据的准确性。<br>2.为什么四次挥手不采用3次挥手？<br>答：</p>
</blockquote>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://example.com/2020/11/03/computer/" data-id="ckhmnwyty00026rx4gxohd7uy" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/my_blog/2020/11/03/async/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Newer</strong>
      <div class="article-nav-title">
        
          JS异步编程的三种方案
        
      </div>
    </a>
  
  
    <a href="/my_blog/2020/11/03/jsCore/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Older</strong>
      <div class="article-nav-title">JS事件循环</div>
    </a>
  
</nav>

  
</article>

</section>
        
          <aside id="sidebar">
  
    

  
    

  
    
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/my_blog/archives/2020/11/">November 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/my_blog/archives/2020/10/">October 2020</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/my_blog/2020/11/18/zhengze/">JS中的正则表达式</a>
          </li>
        
          <li>
            <a href="/my_blog/2020/11/03/react/">React基础知识笔记</a>
          </li>
        
          <li>
            <a href="/my_blog/2020/11/03/vue/">Vue基础知识笔记</a>
          </li>
        
          <li>
            <a href="/my_blog/2020/11/03/async/">JS异步编程的三种方案</a>
          </li>
        
          <li>
            <a href="/my_blog/2020/11/03/computer/">计算机网路笔记</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy; 2020 Jone-xin<br>
      Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>
    </div>
    <nav id="mobile-nav">
  
    <a href="/my_blog/" class="mobile-nav-link">主页</a>
  
    <a href="/my_blog/archives" class="mobile-nav-link">归档</a>
  
    <a target="_blank" rel="noopener" href="https://gitee.com/xiangxinag-darling" class="mobile-nav-link">@我的gitee</a>
  
</nav>
    

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>


  
<link rel="stylesheet" href="/my_blog/fancybox/jquery.fancybox.css">

  
<script src="/my_blog/fancybox/jquery.fancybox.pack.js"></script>




<script src="/my_blog/js/script.js"></script>




  </div>
</body>
</html>